GraphQL Schema
概要
GraphQL Schema Language という独自の言語で記述される
独自の言語を用いることで、特定のプログラミング言語やフレームワークに依存せずに開発が進められる
拡張子: .graphqls、.graphql、.gql
様々な型を扱うことが可能
オブジェクト型
1 つ以上のフィールドからなる集合の型
クライアントから取得可能なデータの構造
フィールド内部に別のオブジェクトをネストさせることが可能
e.g.
code:gql
type Task {
id: Int!
name: String!
dueDate: String!
status: String!
description: String
}
! は NULL を許容 でない ことを表す
スカラ型
単一のフィールドに付ける型
以下の 5 つが組み込みで用意されている
Int: 整数型
Float: 浮動小数点数型
String: 文字列型
Boolean: 論理型
ID: 識別子(ユニークである必要がある)
これ以外のスカラ型もカスタムスカラとして定義できる(e.g. DateTime)
code:gql
scalar DateTime
リスト型
単一のフィールドに付ける型
フィールドが複数の値からなる場合に利用
warning.icon ! を付ける際には、場所によって意味が異なるので注意が必要
table:_
[String]! リスト自体は必ず存在するが、要素に NULL を持つ可能性がある
[String!] リスト自体は NULL の可能性があるが、要素に NULL を持つことはない
[String!]! リスト自体は必ず存在し、要素にも NULL を持つことはない
[String] リスト自体は NULL の可能性があり、要素も NULL を持つ可能性がある
e.g.
code:gql
type Query {
}
列挙型
単一のフィールドに付ける型
Enum とも呼ばれ、あらかじめ列挙された値のみ取ることができる
e.g.
code:gql
enum Color {
RED
BLUE
GREEN
}
ユニオン型
単一のフィールドに付ける型
複数の型のうちいずれかの型であることを表す
e.g.
code:gql
union SearchResult = Human | Droid | Starship
Query 型
Query(データの取得)エントリポイントを定義する ルートタイプ 引数を渡すことが可能
e.g.
code:gql
type Query {
getTask(id: Int!): Task
}
クライアント側では query を用いて呼び出す
code:gql
query {
getTasks {
id
name
dueDate
status
description
}
}
以下のように、同じフィールドを取得しようとするとエラーになる
code:gql
query FirstQuery {
post(id:"1") {
title
},
post(id:"2") {
title
}
}
code:json
{
"errors": [
{
"message": "Fields \"post\" conflict because they have differing arguments. Use different aliases on the fields to fetch both if this was intentional.",
"locations": [
{
"line": 2,
"column": 3
},
{
"line": 5,
"column": 3
}
]
}
]
}
これは、エイリアスを用いれば回避できる
code:gql
query FirstQuery {
post1:post(id:"1") {
title
},
post2:post(id:"2") {
title
}
}
Mutation 型
Mutation(データの更新)エントリポイントを定義する ルートタイプ e.g.
code:gql
type Mutation {
createTask(id: Int!, name: String!): Task!
deleteTask(id: Int!): Task!
}
クライアント側では mutation を用いて呼び出す